package com.by.order.api.service;

import java.util.List;
import com.by.order.api.vo.ReliableMessageVo;

public interface IReliableMessageService {

    /**
     * 在本地事务中记录一条待发送的消息。
     * 该方法会在业务服务（如订单服务）的事务中被调用，以确保业务操作和消息记录的原子性。
     * * @param messageContent 消息内容
     * @param businessId 业务标识，例如订单ID
     * @param messageType 消息类型，用于消费者识别处理
     * @return 记录成功的消息ID
     */
    String recordMessageInLocalTx(String messageContent, String businessId, String messageType);

    /**
     * 根据业务ID查找对应的可靠消息记录。
     * * @param businessId 业务标识
     * @return 消息VO对象，如果不存在则返回null
     */
    ReliableMessageVo getMessageByBusinessId(String businessId);

    /**
     * 根据消息ID查找对应的可靠消息记录。
     *
     * @param messageId 消息ID
     * @return 消息VO对象，如果不存在则返回null
     */
    ReliableMessageVo getMessageById(String messageId);

    /**
     * 获取指定数量和状态的待处理消息列表。
     * 该方法通常由独立的定时任务调用，用于扫描需要发送或重试的消息。
     *
     * @param status 消息状态
     * @param limit 查询数量
     * @return 待处理的消息VO列表
     */
    List<ReliableMessageVo> getMessagesByStatus(int status, int limit);

    /**
     * 更新消息状态。
     * 该方法由消息发送或补偿服务调用，以更新消息在不同处理阶段的状态。
     *
     * @param messageId 消息ID
     * @param newStatus 新状态
     * @param tryCount 尝试次数
     * @return 是否更新成功
     */
    boolean updateMessageStatus(String messageId, int newStatus, int tryCount);

    /**
     * 增加消息尝试次数。
     * * @param messageId 消息ID
     * @return 是否更新成功
     */
    boolean incrementTryCount(String messageId);
}